ORM 선택을 위한 판단의 기준
1. 성능
SQL 데이터베이스의 강력한 기능을 써야한다. 누구처럼 자체 엔진을 사이에 두어 불필요한 추상화 수준을 늘리지 말고.
2. 쿼리문
내가 ORM을 다룰 때 줄곧 이 라이브러리가 의도한 SQL 쿼리문을 작성하는지 살펴보곤 한다. 실제로도 SQL문을 쓰기가 귀찮아서 ORM을 쓰는 것이므로, 내가 의도한 쿼리문이 나오는가가 매우 중요하다.
3. 쿼리빌더
자체 인터페이스로는 안되는 작업들이 생각보다 많이 식별된다. 이 경우 곧바로 Raw Query를 작성하기보다 쿼리빌더를 통해 보다 유연한, 인젝션으로부터 안전한 인터페이스가 노출된 ORM이라면 좋겠다.
4. 매핑
생각보다 매핑 기능을 자주 쓰게 되던데? DTO에 맞추기 위해서 필드를 살짝살짝 수정할 필요가 있긴 한데, 대부분은 조회 결과로부터 직접 변환을 수행하는 것으로 만족할 수 있지만, 필드 이름만 바꾸는 정도는 ORM 단에서 끝냈으면 좋겠다.
Research
TypeORM이 욕을 먹는 이유.reddit
대화 내용 중에서 인상깊었던 것들만 추리면,
- Maintainer가 신뢰도가 낮다.
- 끔찍한 문서화
- 5년째 해결되지 않은 버그
길게 보았을 때 TypeORM이 시대에 뒤떨어질 우려가 보인다. 곤란하네...
Drizzle ORM
This is why I love drizzle ORM
사용사례를 봤는데, 얘는 스키마를 타입스크립트로 작성하고 쿼리 빌더를 작성할 때 언어 차원에서 인터페이스를 제공한다. 쿼리빌더이므로 당연하게도 JOIN이 쿼리에 포함되어있다. 위 영상을 보고 더 궁금한 점은
- SQL 쿼리문을 뽑아볼 수 있는가?
- 간단한 쿼리를 지원하는 편리한 인터페이스가 있는가? (e.g.,
findMany
) - 필드 매핑을 라이브러리 차원에서 지원하는가?